﻿#define _CRT_SECURE_NO_WARNINGS 1

//#include <iostream>
//using namespace std;
//int main()
//{
//	int a = 0;
//	double b = 0.1;
//	char c = 'x';
//
//	cout << a << " " << b << "  " << c << endl;
//	printf("%d %lf  %c\n", a, b,c);
//	// 可以自动识别变量的类型
//
//	cin >> a;
//	cin >> b >> c;
//	cout << a << endl;
//	cout << b << "  " << c << endl;
//	return 0;
//}





//#include <iostream>
//#include <assert.h>
//using namespace std;
//void Func(int a = 0)
//{
//	cout << a << endl;
//}
//int main()
//{
//	Func();
//	//没有传参时，使用参数的默认值
//
//	Func(10);  
//	// 传参时，使用指定的实参
//
//	return 0;
//}

//
//#include <iostream>
//using namespace std;
////全缺省
//
//void Func1(int a = 10, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
////半缺省
//
//void Func2(int a, int b = 10, int c = 20)//半缺省必须从右往左缺省
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//int main()
//{
//	Func1();
//	Func1(1);
//	Func1(1, 2);
//	Func1(1, 2, 3);
//	Func2(100);
//	Func2(100, 200);//传参必须从左往右依次传。Func2(,200,300)这样是错误的
//	Func2(100, 200, 300);
//	return 0;
//}


//
//
//
//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 0;
//	// 引用：b和c是a的别名
//
//	int& b = a;
//	int& c = a;
//	// 也可以给别名b取别名，d相当于还是a的别名
//
//	int& d = b;
//	++d;
//	// 这里取地址我们看到是⼀样的
//
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << &d << endl;
//	return 0;
//}
//
//

//
//
//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 10;
//	
//	//int& ra;//编译会报错，引用必须初始化
//	int& b = a;
//	int c = 20;
//	b = c;
//	//这里并非让b引用c，因为C++引用不能改变指向，
//	//这里是赋值，a,b的值都变为20
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	return 0;
//}





int main()
{
	const int a = 10;
	// 编译报错：error C2440 : “初始化” :⽆法从“const int”转换为“int& ”
	//这里的引用是对a访问权限的放大

	//int& ra = a;
	//这样才可以

	const int& ra = a;
	// 编译报错：error C3892 : “ra”:不能给常量赋值

	//ra++;
	//这里的引用是对b访问权限的缩小

	//rb++;
	int b = 20;
	const int& rb = b;
	// 编译报错：error C3892 : “rb”:不能给常量赋值

	return 0;
}